Another preg_match() [function.preg-match]: Unknown modifier '{'

function vldLicense($lic)
{
echo "called with lic: ". $lic . "<br>";
echo preg_match('[A-Za-z0-9]', $lic) . "<br>";

if (preg_match('[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A -Za-
z0-9]{4}', $lic) == 0) return false;
return true;
}

gives me:

called with lic: 64gd-kwey-t643-ytes
0
Warning: preg_match() [function.preg-match]: Unknown modifier '{'

Why the 0 in the simple match?
Why the unknown modifier in the complex match?

Thanks in advance
Jan
JanDoggen [ Fr, 18 April 2008 15:25 ] [ ID #1945399 ]

Re: Another preg_match() [function.preg-match]: Unknown modifier'{' ;-)

JanDoggen schreef:
> function vldLicense($lic)
> {
> echo "called with lic: ". $lic . "<br>";
> echo preg_match('[A-Za-z0-9]', $lic) . "<br>";
>
> if (preg_match('[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A -Za-
> z0-9]{4}', $lic) == 0) return false;
> return true;
> }
>
> gives me:
>
> called with lic: 64gd-kwey-t643-ytes
> 0
> Warning: preg_match() [function.preg-match]: Unknown modifier '{'
>
> Why the 0 in the simple match?
> Why the unknown modifier in the complex match?
>

In the first call, the square brackets are assumed to be modifiers. If
you would put something behind the character class (e.g.
'[A-Za-z0-9]a'), you will the same compliant pointing at the bracket.


JW
Janwillem Borleffs [ Fr, 18 April 2008 15:44 ] [ ID #1945401 ]

Re: Another preg_match() [function.preg-match]: Unknown modifier '{' ;-)

On Fri, 18 Apr 2008 06:25:45 -0700 (PDT), JanDoggen
<JanDoggen [at] planet.nl> wrote in
<3f6b8dce-7783-43bd-a727-bfebcd333a38 [at] k37g2000hsf.googlegroups.com>:

>function vldLicense($lic)
>{
>echo "called with lic: ". $lic . "<br>";

You can write this as:

echo "called with lic: $lic<br>";

php will replace $lic with the value of the variable. See the
difference between (") and (').

>echo preg_match('[A-Za-z0-9]', $lic) . "<br>";

echo preg_match('/[A-Za-z0-9]/', $lic) . "<br>";

Regexes are required to be bounded by a character. "/" is the usual
character used, but you can use others as well.

> if (preg_match('[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A -Za-
>z0-9]{4}', $lic) == 0) return false;

if (preg_match('/[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[ A-Za-
z0-9]{4}/', $lic) == 0) return false;

Again, put the regex inside of "/".

> return true;
>}
>
>gives me:
>
>called with lic: 64gd-kwey-t643-ytes
>0
>Warning: preg_match() [function.preg-match]: Unknown modifier '{'
>
>Why the 0 in the simple match?

Because preg_match was treating "[]" as the regex bounding characters
instead of the class boundary, so it read "[A-Za-z0-9]" as matching
the literal string "A-Za-z0-9".

>Why the unknown modifier in the complex match?

Same reason. It read the first occurrence of "[A-Za-z0-9]" as the
regex (match literal string "A-Za-z0-9") and then couldn't figure out
what to do with {4}.

--
Charles Calvert | Software Design/Development
Celtic Wolf, Inc. | Project Management
http://www.celticwolf.com/ | Technical Writing
(703) 580-0210 | Research
Charles Calvert [ Fr, 18 April 2008 17:29 ] [ ID #1945408 ]
PHP » comp.lang.php » Another preg_match() [function.preg-match]: Unknown modifier '{'

Vorheriges Thema: Having trouble installing a game.
Nächstes Thema: Free Web Directory